Passed
Branch develop (e93b74)
by Endre
03:49
created

Application.onPageChanged   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
import React from 'react';
2
import {ILanguageSetup} from '../Language/ChangeLanguageSetup';
3
import {IPageData} from '../Router/Router';
4
import Container from './Container';
5
import ModuleLoader from './ModuleLoader';
6
import ApplicationView, {IAdapter as IViewAdapter} from './View/Application';
7
import Model from './View/Application/Model';
8
9
interface IProperties {
10
}
11
12
interface IState {
13
  loadedLanguage: string,
14
  menuOpen: boolean,
15
  loadedPage: typeof React.Component | null,
16
  shownPage: string
17
}
18
19
export interface IModulePageData extends IPageData {
20
  module: string
21
}
22
23
export interface IAdapter extends IViewAdapter {
24
  onPageChanged(oldValue: IPageData, newValue: IPageData): void;
25
}
26
27
export default class Application extends React.Component<IProperties, IState> {
28
  adapter: IAdapter;
29
  moduleLoader: ModuleLoader;
30
31
  constructor(props: IProperties) {
32 4
    super(props);
33
34 4
    this.state = {
35
      loadedLanguage: Container.language.observer.value.languageCode,
36
      menuOpen: Container.menuOpenState.value,
37
      loadedPage: null,
38
      shownPage: ''
39
    };
40 4
    this.adapter = Container.applicationAction.adapter;
41 4
    this.moduleLoader = Container.moduleLoader;
42
43 4
    Container.language.adapter.addListener(this.onLanguageLoaded.bind(this));
44 4
    Container.moduleStateAdapter.addListener(this.onModuleLoaded.bind(this));
45 4
    Container.router.adapter.addListener(this.adapter.onPageChanged);
46 4
    Container.menuOpenStateAdapter.onChange = this.onMenuChange.bind(this);
47
  }
48
49
  componentDidMount(): void {
50 4
    Container.language.changeLanguageSetup.interact({languageCode: 'de-de'}, {}).then();
51 4
    const homePage: IModulePageData = {
52
      depth: 0,
53
      name: 'home',
54
      url: './',
55
      module: './HelloWorld'
56
    };
57 4
    const settingsPage: IModulePageData = {
58
      depth: 1,
59
      name: 'settings',
60
      url: './settings/',
61
      module: './Settings/Settings'
62
    };
63 4
    Container.router.registry.registerPage(homePage);
64 4
    Container.router.registry.registerPage(settingsPage);
65 4
    Container.router.observer.value = homePage;
66
  }
67
68
  onLanguageLoaded(oldValue: ILanguageSetup, newValue: ILanguageSetup) {
69 1
    this.setState({loadedLanguage: newValue.languageCode});
70
  }
71
72
  onMenuChange(oldValue: boolean, newValue: boolean) {
73 1
    this.setState({menuOpen: newValue});
74
  }
75
76
  onModuleLoaded(oldValue: typeof React.Component | null, newValue: typeof React.Component | null) {
77 1
    this.setState({loadedPage: newValue});
78
  }
79
80
  render(): React.ReactNode {
81 7
    const model: Model = Container.applicationPresenter.present();
82
83 7
    return <ApplicationView model={model} adapter={this.adapter} />;
84
  }
85
}